package com.example.greedy;

import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.Comparator;

class Item {
    int w; //重量
    int v; //价值

    public Item(int w, int v) {
        this.w = w;
        this.v = v;
    }
}

public class ScoreBackPack {
    @Test
    public int backPack(int[] wgt, int[] val, int cap) {
        int length = wgt.length;
        Item items[] = new Item[length];
        for (int i = 1; i < items.length; i++) {
            items[i - 1] = new Item(wgt[i - 1], val[i - 1]);
        }
        // 不会 + 贪心的正确性证明
        Arrays.sort(items, Comparator.comparingDouble(item -> -((double) item.v / item.w)));
        // 循环贪心选择
        int res = 0;
        for (Item item : items) {
            if (item.w <= cap) {
                // 若剩余容量充足，则将当前物品整个装进背包
                res += item.v;
                cap -= item.w;
            } else {
                // 若剩余容量不足，则将当前物品的一部分装进背包
                res += (double) item.v / item.w * cap;
                // 已无剩余容量，因此跳出循环
                break;
            }
        }
        return res;
    }
}
